perm filename READ.OLD[MUS,LCS] blob sn#319845 filedate 1977-12-06 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	      EXTERNAL FUNCTION GETINF(ARRAY J,INSR,INBT,INCH,INMX,INDR),
C00009 ENDMK
C⊗;
      EXTERNAL FUNCTION GETINF(ARRAY J,INSR,INBT,INCH,INMX,INDR),
      RDSMPL(ARRAY N,BITS),GETIN2(ARRAY J,INSR,INBT,INCH,INMX,INDR),
      RDSMP2(ARRAY N,BITS),GETIN3(ARRAY J,INSR,INBT,INCH,INMX,INDR),
      RDSMP3(ARRAY N,BITS),GETIN4(ARRAY J,INSR,INBT,INCH,INMX,INDR),
      RDSMP4(ARRAY N,BITS);
 
      ARRAY INF, IN2, IN3, IN4(1536);
      VARIABLE /CNT,/RD,/SCNT,INCH,INSR,INMX,INDR,INBT,INBUF,
      /CNT2,/RD2,/SCNT2,INCH2,INSR2,INDR2,INBT2,INBUF2,
      /CNT3,/RD3,/SCNT3,INCH3,INSR3,INDR3,INBT3,INBUF3,
      /CNT4,/RD4,/SCNT4,INCH4,INSR4,INDR4,INBT4,INBUF4;
 
      FUNCTION PRNTIT(CNT,INSR,INBT,INCH,INDR,INBUF);  
      BEGIN  VARIABLE DUR;  <***** don't forget to init. SCNT←0; ****
        INBUF←1536-512*INBT;  DUR←INDR/INSR/INCH;
        PRINT "SRATE=",INSR," BITS=",12+INBT*6," NCHNS=",INCH,
        " MAXAMP=",INMX," DUR=",DUR;
        CNT←INBUF+1;
      END;

      FUNCTION READIN(RD);
      BEGIN 		<***** DON'T FORGET TO INIT SCNT ← 0;
        IF SCNT=0 THEN BEGIN  <****** READ HEADER INTO ARRAY INF.
        PRINT "****READING ",INFILE,".SND****";
          GETINF(INF,INSR,INBT,INCH,INMX,INDR);
          PRNTIT(CNT,INSR,INBT,INCH,INDR,INBUF);
        END;
      SCNT←SCNT+1;  < ***** UPDATE THE COUNTER
      IF SCNT > INDR THEN  BEGIN <***CHECK IF SMPL CNT IS EXCEEDED
        RD←0;  RETURN(RD); END;
      IF CNT > INBUF THEN BEGIN
        RDSMPL(INF,INBT);   <**** GET A NEW BUFFER WHEN NECESSARY
        CNT←0;  END;
      RD←INF(CNT);  <**** PUT VALUE OF SAMPLE INTO RD
      CNT←CNT+1; <**** UPDATE THE COUNTER
      RETURN(RD); END;   <**** VALUE OF RD IS RETURNED IN READIN(RD)

      FUNCTION READI2(RD2);  < ***** DUPLICATE OF 'READIN' *****
      BEGIN 
        IF SCNT2=0 THEN BEGIN  
          PRINT "****READING ",INFIL2,".SND****";
          GETIN2(IN2,INSR2,INBT2,INCH2,INMX,INDR2); 
          PRNTIT(CNT2,INSR2,INBT2,INCH2,INDR2,INBUF2);
        END;
      SCNT2←SCNT2+1;
      IF SCNT2 > INDR2 THEN  BEGIN 
        RD2←0;  RETURN(RD2); END;
      IF CNT2 > INBUF2 THEN BEGIN
        RDSMP2(IN2,INBT2);
        CNT2←0;  END;
      RD2←IN2(CNT2); 
      CNT2←CNT2+1; 
      RETURN(RD2); END; 

      FUNCTION READI3(RD3);
      BEGIN 		
        IF SCNT3=0 THEN BEGIN  
          PRINT "****READING ",INFIL3,".SND****";
          GETIN3(IN3,INSR3,INBT3,INCH3,INMX,INDR3); 
          PRNTIT(CNT3,INSR3,INBT3,INCH3,INDR3,INBUF3);
        END;
      SCNT3←SCNT3+1;
      IF SCNT3 > INDR3 THEN  BEGIN 
        RD3←0;  RETURN(RD3); END;
      IF CNT3 > INBUF3 THEN BEGIN
        RDSMP3(IN3,INBT3);
        CNT3←0;  END;
      RD3←IN3(CNT3);
      CNT3←CNT3+1; 
      RETURN(RD3); END; 

      FUNCTION READI4(RD4);
      BEGIN 		
        IF SCNT4=0 THEN BEGIN  
          PRINT "****READING ",INFIL4,".SND****";
          GETIN4(IN4,INSR4,INBT4,INCH4,INMX,INDR4); 
          PRNTIT(CNT4,INSR4,INBT4,INCH4,INDR4,INBUF4);
        END;
      SCNT4←SCNT4+1;
      IF SCNT4 > INDR4 THEN  BEGIN 
        RD4←0;  RETURN(RD4); END;
      IF CNT4 > INBUF4 THEN BEGIN
        RDSMP4(IN4,INBT4);
        CNT4←0;  END;
      RD4←IN4(CNT4);
      CNT4←CNT4+1; 
      RETURN(RD4); END; 

<**** instrument definitions.

      SEG(F6);0 0 .7 20  .5 50  1 80  0 100; <ENVELOPE ON INPUT SOUND.
      INSTRUMENT READA;	<**** A POSSIBLE READIN INSTRUMENT.
      OSCIL(P4,MAG/P2,F6);
      OUTA←OUTA+U1*READIN(RD);
      END;
      INSTRUMENT READB;
      OSCIL(P4,MAG/P2,F6);
      OUTA←OUTA+U1*READI2(RD2);
      END;
      INSTRUMENT READC;
      OSCIL(P4,MAG/P2,F6);
      OUTA←OUTA+U1*READI3(RD3);
      END;
      INSTRUMENT READD;
      OSCIL(P4,MAG/P2,F6);
      OUTA←OUTA+U1*READI4(RD4);
      END;

      OUTFILE←"RD.SND";  <**** the extension must appear here.
      PLAY; 
      READA 0  .37  0 2; <*** amplitude will be doubled
      INFILE←"CL";  <FILE NAME TO BE READ IN FOR NOTE ABOVE THIS LINE!!!
      SCNT←0; 	<initialize counter file above.
      READB .3  .37  0 1; <**** amplitude will be unchanged
      INFIL2←"TO";   <FILE NAME TO BE READ IN. (.SND extension assumed.)
      SCNT2←0;       < intitialize the counter
      READC .8 .37  0 .7;  <**** note the amplitude
      INFIL3←"CL";        <FILE NAME TO BE READ IN.
      SCNT3←0;
      READD 1.3 .4   0  1.8;  SCNT4←0; <*** use READD 
      INFIL4←"TO"; <FILE NAME TO BE READ IN FOR NOTE ABOVE THIS LINE!!!
      FINI;